#ifndef DATA_H
#define DATA_H
#include "boolean.h"

#define MaxCol 200 // Panjang baris maksimal
#define MaxLn 300 // Jumlah baris maksimal

struct term{
    char operasi;
    char* kata;
    struct term *sisi1, *sisi2;
};

typedef struct term* address;
typedef struct term node;

#define Isi(X) (X)->kata
#define Operator(X) (X)->operasi
#define Left(X) (X)->sisi1
#define Right(X) (X)->sisi2

/*
Pengertian kode yang ada di operasi : 
 & : AND
 | : OR
 = : Biimplikasi / Equivalensi
 > : implikasi
 < : reduksi (implikasi arah kebalik)
 - : negasi
 f : positive term
 n : negative term
 a : Universal Quantifier (All)
 e : Existensial Quantifier (Exists) 
*/

int BBB;                            //Jumlah clausa
boolean positif[MaxLn][MaxCol];     //Penanda term
int member[MaxLn];                  //Mencatat jumlah term dalam clausa
char* clauses[MaxLn][MaxCol];       //Urutan : clausa ke-, string term.
char* variable[MaxLn];
char Line[MaxLn][MaxCol];           //Array of string
int lnum;                           //Jumlah baris yang terbaca
int tpremis;                        //Jumlah premis
int tgoal;                          //Jumlah Goal
int tvar;                           //Jumlah variable yang sudah ditemukan.
extern boolean prop;				//penanda proporsional atau relational

address premis[MaxLn];              //menyimpan premis yang sudah diparsing
address ngoal[MaxLn];               //menyimpan negasi goal yang sudah diparsing

boolean isvariable(char* s);
boolean isfunction(char* s);
boolean isconstant(char* s);
boolean isalphanum(char c);
void print_tree(address X);
void print_clause(int indeks,int tipe,int nomor);

#endif
